package agentes;

import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTextPane;

public class PrincipioFundamentalContagem {

	ArrayList<JTextField> opcao = new ArrayList<JTextField>();
	ArrayList<JPanel> panel = new ArrayList<JPanel>();

	JTextField resposta;
	int erros[];

	JButton ok;

	Frame frame = new JFrame();

	public PrincipioFundamentalContagem() {

	}

	public void setErros(int i[]) {
		erros = i;
	}

	public int[] getErros() {
		return erros;
	}

	public void setPanel(JPanel j, int i) {
		panel.add(i, j);
	}

	public void setBtnValida(JButton o) {
		ok = o;
	}

	public void setResposta(JTextField resp) {
		resposta = resp;
	}

	public void setOpcao(JTextField op, int i) {
		opcao.add(i, op);
	}

	public JButton getBtnValida() {
		return ok;
	}

	public JTextField getOpcao(int i) {
		return opcao.get(i);
	}

	public JTextField getResposta() {
		return resposta;
	}

	public JPanel getPanel(int i) {
		return panel.get(i);
	}

	public int getValueOpcao(int i) {
		return Integer.parseInt(opcao.get(i).getText());
	}

	public int getValueResposta() {
		return Integer.parseInt(resposta.getText());
	}

	public void setAtencaoOpcao(int i) {
		opcao.get(i).setBorder(
				BorderFactory.createTitledBorder(
						BorderFactory.createLineBorder(Color.yellow), "!"));
	}

	public void setErrorOpcao(int i) {
		opcao.get(i).setBorder(
				BorderFactory.createTitledBorder(
						BorderFactory.createLineBorder(Color.red), "Erro!"));
	}

	public void setErrorResposta() {
		resposta.setBorder(BorderFactory.createTitledBorder(
				BorderFactory.createLineBorder(Color.red), "Erro!"));
	}

	public void setOkOpcao(int i) {
		opcao.get(i).setBorder(
				BorderFactory.createTitledBorder(
						BorderFactory.createLineBorder(Color.green), "Certo!"));
	}

	public void setOkResposta() {
		resposta.setBorder(BorderFactory.createTitledBorder(
				BorderFactory.createLineBorder(Color.green), "Certo!"));
	}

	public void removeBtnValida() {
		ok.setVisible(false);
	}

	public void moveBtnValida() {
		ok.setVisible(false);
		ok.setBounds(ok.getBounds().x, ok.getBounds().y + 80,
				ok.getBounds().width, ok.getBounds().height);
		ok.setVisible(true);
	}

	public void removeAlertOpcao(int i) {
		opcao.get(i).setBorder(BorderFactory.createLineBorder(Color.black));
	}

	public void removeAlertResposta() {
		resposta.setBorder(BorderFactory.createLineBorder(Color.black));
		resposta.setText("");
	}

	public void mostrarAlerta(int tipo) {

		JTextPane txtpnEnunciado = new JTextPane();
		txtpnEnunciado.setContentType("text/html");
		txtpnEnunciado.setFont(new Font("Dialog", Font.PLAIN, 12));
		txtpnEnunciado.setEditable(false);
		txtpnEnunciado.setOpaque(false);

		switch (tipo) {
		case 1:
			txtpnEnunciado.setText("<br>"
					+ "Você confundiu-se no cálculo da conta do passo 2: "
					+ Integer.parseInt(opcao.get(2).getText()) + " x "
					+ Integer.parseInt(opcao.get(3).getText()) + "<br><br>");
			erros[0]++;
			break;
		case 2:
			if (erros[3] == 0) {
				txtpnEnunciado
						.setText("<br>"
								+ "O arranjo simples é feito com n elementos distintos, agrupados p a p: A(n,p)<br><br>"
								+ "No caso do exemplo, são 4 bandas agrupadas 2 a 2 (1º(primeiro) e 2º(segundo) lugares).<br><br>");
			} else {

				txtpnEnunciado
						.setText("<br>"
								+ "O arranjo simples é feito com n elementos distintos, agrupados p a p: A(n,p)<br><br>"
								+ "No caso do exemplo, são 4 bandas agrupadas 2 a 2 (1º(primeiro) e 2º(segundo) lugares).<br><br>"

								+ "Um exemplo do uso do princípio fundamental da contagem: <br>"
								+ "<center><b>A (5,3) = n x (n-1) x (n-2) </b>"
								+ "<i>n: número de elemento distintos</i></center><br><br><br>"
								+ "Como são agrupamentos de 3 a 3, fazemos multiplicação de 3 números. <br>"
								+ "No início temos n possibilidades de escolhas; depois, como já foi selecionado um elemento, <br>"
								+ "só restam (n-1) opção; assim sucessivamente.<br><br>");
			}
			erros[1]++;
			break;
		case 3:
			txtpnEnunciado
					.setText("<br>"
							+ "As duas posições não podem ter a mesma quantidade de opções pois, <br>"
							+ "se uma banda já foi escolhida para uma das posições, <br>"
							+ "esta deixa de ser uma opção válida para a outra posição.<br><br>"
							+ "Não pode ter, por exemplo, Banda A em primeiro lugar e <br>"
							+ "novamente a Banda A, para a segunda colocação."
							+ "<br><br>");
			erros[2]++;
			break;
		case 4:
			txtpnEnunciado
					.setText("<br>"
							+ "Você deve estar confundindo a quantidade de elementos (bandas) <br>"
							+ "com o número de posições (2: primeiro e segundo lugar)."
							+ "<br><br>");
			erros[3]++;
			break;
		case 5:
			txtpnEnunciado
					.setText("<br>"
							+ "Observe que o valor indicado é superior ao número de bandas."
							+ "<br><br>");
			erros[4]++;
			break;
		case 6:
			if (erros[5] == 0) {
				txtpnEnunciado.setText("<br>" + "Preencha todos os campos!"
						+ "<br><br>");
			} else if (erros[5] == 1) {
				txtpnEnunciado
						.setText("<br>"
								+ "Preencha todos os campos! <br><br>"
								+ "Observe o princípio fundamental da contagem: n x (n-1) x (n-2) ... "
								+ "<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "Preencha todos os campos! <br><br>"
								+ "Observe o princípio fundamental da contagem: n x (n-1) x (n-2) ... <br><br>"
								+ "No caso do exercício é n x (n-1) pois são agrupamentos de 2 elementos. <br>"
								+ "E neste exercício, os elementos são o total de bandas."
								+ "<br><br>");
			}
			erros[5]++;
			break;
		case 7:
			txtpnEnunciado
					.setText("<br>"
							+ "Parabéns! Você resolveu corretamente o exercício.<br>Agora, para fixar o conteúdo clique na aba '3- Exercícios de fixação'."
							+ "<br><br>");
			break;
		case 8:
			txtpnEnunciado
					.setText("<br>" 
							+ "Observe o princípio fundamental da contagem: n x (n-1) x (n-2) ... <br><br>"							
							+ "E a quantidade que você inseriu é diferente do total de elementos a serem agrupados."
							+ "<br><br>");
			break;
		case 9:
			txtpnEnunciado.setText("<br>"
					+ "Você confundiu-se no cálculo da conta do passo 1: "
					+ Integer.parseInt(opcao.get(1).getText()) + " - 1<br><br>");
			break;
			
		case 10:
			if (erros[9] == 0) {
				txtpnEnunciado.setText("<br>" + "Preencha todos os campos!"
						+ "<br><br>");
			} else if (erros[9] == 1) {
				txtpnEnunciado
						.setText("<br>"
								+ "Preencha todos os campos! <br><br>"
								+ "Efetue a operação do passo 2!"
								+ "<br><br>");
			} else {
				txtpnEnunciado
						.setText("<br>"
								+ "Preencha todos os campos! <br><br>"
								+ "Efetue a operação do passo 3: "
								+ getValueOpcao(2) + " x " + getValueOpcao(3) 
								+ "<br><br>");
			}
			erros[9]++;
			break;

		}
		JOptionPane.showMessageDialog(frame, txtpnEnunciado);
	}

	public void removerRespostas() {
	}

	public void mostrarAlertaPreenchimento() {
	}

	public void mostrarAlertaElementoRepetido() {
	}
}
